import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import '../model/categoryModel.dart';

/// 全局分类数据管理器
/// 使用GetX进行全app状态管理
class CategoryManager extends GetxController {
  static CategoryManager get instance => Get.find<CategoryManager>();
  
  // 分类数据列表
  final RxList<CategoryModel> _categories = <CategoryModel>[].obs;
  
  // 数据加载状态
  final RxBool _isLoading = false.obs;
  
  // 数据获取时间戳，用于缓存控制
  final RxInt _lastUpdateTime = 0.obs;
  
  // 缓存有效期（120分钟）
  static const int _cacheValidDuration = 120 * 60 * 1000; // 120分钟的毫秒数
  
  /// 获取所有分类数据
  List<CategoryModel> get categories => _categories.value;
  
  /// 获取分类数据的响应式版本（用于UI监听）
  RxList<CategoryModel> get categoriesRx => _categories;
  
  /// 是否正在加载
  bool get isLoading => _isLoading.value;
  
  /// 是否有分类数据
  bool get hasCategories => _categories.isNotEmpty;
  
  /// 数据是否过期（需要重新获取）
  bool get isDataExpired {
    final now = DateTime.now().millisecondsSinceEpoch;
    return (now - _lastUpdateTime.value) > _cacheValidDuration;
  }
  
  /// 设置分类数据
  void setCategories(List<CategoryModel> newCategories) {
    _categories.value = newCategories;
    _lastUpdateTime.value = DateTime.now().millisecondsSinceEpoch;
    debugPrint('CategoryManager: 已保存 ${newCategories.length} 个分类数据');
  }
  
  /// 设置加载状态
  void setLoading(bool loading) {
    _isLoading.value = loading;
  }
  
  /// 根据分类ID查找分类
  CategoryModel? getCategoryById(int categoryId) {
    try {
      return _categories.firstWhere((category) => category.categoryId == categoryId);
    } catch (e) {
      debugPrint('CategoryManager: 未找到分类ID为 $categoryId 的分类');
      return null;
    }
  }
  
  /// 根据分类名称查找分类
  CategoryModel? getCategoryByName(String categoryName) {
    try {
      return _categories.firstWhere((category) => category.categoryName == categoryName);
    } catch (e) {
      debugPrint('CategoryManager: 未找到分类名称为 $categoryName 的分类');
      return null;
    }
  }
  
  /// 获取分类名称列表
  List<String> getCategoryNames() {
    return _categories.map((category) => category.categoryName).toList();
  }
  
  /// 获取分类ID列表
  List<int> getCategoryIds() {
    return _categories.map((category) => category.categoryId).toList();
  }
  
  /// 清空分类数据
  void clearCategories() {
    _categories.clear();
    _lastUpdateTime.value = 0;
    debugPrint('CategoryManager: 已清空分类数据');
  }
  
  /// 添加单个分类
  void addCategory(CategoryModel category) {
    if (!_categories.any((c) => c.categoryId == category.categoryId)) {
      _categories.add(category);
      debugPrint('CategoryManager: 已添加分类: ${category.categoryName}');
    }
  }
  
  /// 删除分类
  void removeCategory(int categoryId) {
    _categories.removeWhere((category) => category.categoryId == categoryId);
    debugPrint('CategoryManager: 已删除分类ID: $categoryId');
  }
  
  /// 更新分类
  void updateCategory(CategoryModel updatedCategory) {
    final index = _categories.indexWhere((c) => c.categoryId == updatedCategory.categoryId);
    if (index != -1) {
      _categories[index] = updatedCategory;
      debugPrint('CategoryManager: 已更新分类: ${updatedCategory.categoryName}');
    }
  }
  
  /// 获取调试信息
  String getDebugInfo() {
    return '''
CategoryManager 调试信息:
- 分类数量: ${_categories.length}
- 是否正在加载: $isLoading
- 上次更新时间: ${DateTime.fromMillisecondsSinceEpoch(_lastUpdateTime.value)}
- 数据是否过期: $isDataExpired
- 分类列表: ${_categories.map((c) => '${c.categoryName}(${c.categoryId})').join(', ')}
    ''';
  }
  
  @override
  void onInit() {
    super.onInit();
    debugPrint('CategoryManager: 全局分类管理器已初始化');
  }
  
  @override
  void onClose() {
    debugPrint('CategoryManager: 全局分类管理器已销毁');
    super.onClose();
  }
}

/// 分类管理器便捷访问扩展
extension CategoryManagerExtension on CategoryManager {
  /// 快速访问实例的静态方法
  static CategoryManager get to => CategoryManager.instance;
  
  /// 初始化分类管理器（在app启动时调用）
  static void init() {
    Get.put(CategoryManager(), permanent: true);
    debugPrint('CategoryManager: 全局分类管理器已注册');
  }
}
